package com.example.springbootdemo.autowired;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service
public class MyService {

    // 先 by type 、后 by name：先按照类型，有多个情况再按照属性名找beanname。
    @Autowired
    // 如果有重复的，根据指定 bean name 注入
    @Qualifier("dao")
    // java规范(JSR250) 默认按照 名称注入  (还有个（JSR330规范） @Inject 需要单独导包不记了)
    // @Resource(name = "dao")
    private MyDao myDao;

    private MyDao serviceDao;

    // 在有参构造器中时，参数会从spring中找 （如果只有一个有参构造，@Autowired 可以省略）
    // @Autowired
    public MyService(//@Autowired // 跟方法上效果一样
                             MyDao myDao) {
        this.serviceDao = myDao;
    }

    public MyDao getServiceDao() {
        return serviceDao;
    }

    // 加载方法上时，形参会从spring中找
    // @Autowired
    public void setServiceDao(@Autowired // 跟方法上效果一样
                                      MyDao myDao) {
        this.serviceDao = myDao;
    }

    @Override
    public String toString() {
        return "MyService{" +
                "myDao=" + myDao +
                ", service='" + serviceDao + '\'' +
                '}';
    }
}
